# -*- coding: utf-8 -*-
"""
Created on Mon Feb 11 15:33:08 2019

@author: user
"""

# ndarray 数组的运算
import numpy as np

# 元素级运算(数组对应位置元素运算)
arr1 = np.arange(6).reshape(2,3)
print(arr1)
print(arr1 + 1)
print(arr1 * 2)
print(arr1 / 2)

# 两个数组对应位置元素运算
arr2 = np.arange(6).reshape(2,3) + 1
print(arr1 + arr2)
print(arr1 * arr2) # 不是矩阵乘法

# numpy 一元函数
data = np.arange(24).reshape(2,3,4)
#data = data / np.mean(data)

print(np.abs(data))
print(np.sqrt(data))
print(np.square(data))
print(np.log(np.exp(data)))
# 返回元素的倒数
# np.reciprocal()


# 三角函数
print(np.sin(data*np.pi/180))
print(np.cos(data*np.pi/180))


# 近似数
float_data = np.array([1.232, 5.55, 1213, 0.567])
# 四舍五入函数
print(np.around(float_data, decimals = 2))
print(np.rint(float_data))
print(np.ceil(float_data))

# numpy 统计函数
# np.amin() np.amax() 从数组中给定的元素中查找最小、最大值

# numpy percentile()
#百分位数是统计中使用的度量，表示小于这个值得观察值占某个百分比。 函数numpy.percentile()接受以下参数。
#
#numpy.percentile(a, q, axis)


# numpy.median() 中值
# numpy.mean() 数组的算术平均数
# numpy.average() 加权平均值
# numpy.std()    标准差**2 = 方差 numpy.var()

# numpy 二元函数
inputArray1 = np.arange(9, dtype= np.float).reshape(3,3)
print("第一个数组：", inputArray1)

inputArray2 = np.array([10,10,10])
print("第二个数组：", inputArray2)

# add subtract multiply divide
print(np.add(inputArray1, inputArray2))  # 广播机制
print(np.subtract(inputArray1, inputArray2))


import numpy as np
# Numpy 广播
# 广播是指numpy 在算术运算期间处理不同形状数组的能力

# 如果阵列的形状相同，操作被无缝执行
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
print(a * b)

# 广播
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
b = np.array([1.0,2.0,3.0])
print(a)
print(b) 
print(a + b)

# 小结
# numpy的运算函数操作ndarray
# 1.元素级运算：+/-/*//
# 2.一元函数：统计函数、三角函数、近似函数
# 3.二元函数：ndarray之间的运算